gh-146636: PEP 803: Reference documentation#148013
gh-146636: PEP 803: Reference documentation#148013encukou wants to merge 9 commits intopython:mainfrom
Conversation
ZeroIntensity
left a comment
There was a problem hiding this comment.
Congrats on the PEP acceptance :)
Mostly editorial comments from me. The content generally looks good.
| Note that compiling for Stable ABI is *not* a complete guarantee that code will | ||
| be compatible with the expected Python versions. | ||
| Stable ABI prevents *ABI* issues, like linker errors due to missing |
There was a problem hiding this comment.
I think we need to precede "Stable ABI" with "the"?
| Note that compiling for Stable ABI is *not* a complete guarantee that code will | |
| be compatible with the expected Python versions. | |
| Stable ABI prevents *ABI* issues, like linker errors due to missing | |
| Note that compiling for the Stable ABI is *not* a complete guarantee that code will | |
| be compatible with the expected Python versions. | |
| The Stable ABI prevents *ABI* issues, like linker errors due to missing |
There was a problem hiding this comment.
Even if there's two of them?
There was a problem hiding this comment.
Yeah, not too sure about the rules here. What about "the Stable ABIs"?
There was a problem hiding this comment.
The way I wrote it still sounds best to me...
Doc/c-api/stable.rst
Outdated
| symbols or data corruption due to changes in structure layouts or function | ||
| signatures. | ||
| However, other changes in Python can change the *behavior* of extensions. | ||
| See Python's Backwards Compatibility Policy (:pep:`387`) for details. |
There was a problem hiding this comment.
This sentence confused me a little when I first read it. I had read it as "We might change the behavior of extensions -- go read our backward compatibility policy if you want to know what", but then we provide an example right after the reader was diverted. Could we move this sentence to after the following paragraph, or put it in a seealso note?
Doc/whatsnew/3.15.rst
Outdated
| part of the instance struct; and | ||
| - Switching from a ``PyInit_`` function to a new export hook, | ||
| :c:func:`PyModExport_* <PyModExport_modulename>`, introduced for this | ||
| purpose in :pep:`903`. |
There was a problem hiding this comment.
| purpose in :pep:`903`. | |
| purpose in :pep:`803`. |
Doc/whatsnew/3.15.rst
Outdated
| be selected in a build tool (such as Setuptools, ``meson-python``, Cython, | ||
| Scikit-build-core, Maturin, and similar). |
There was a problem hiding this comment.
Is it intentional that meson-python is the only package in a code block here?
|
The new check caught removals: https://github.com/python/cpython/actions/runs/23907059205/job/69719041532?pr=148013 (and on your PR out of everyone's ;-) |
ngoldbaum
left a comment
There was a problem hiding this comment.
Thanks for putting this together! I left a few comments inline, please take them or leave them as you see fit.
Doc/c-api/module.rst
Outdated
| defined this way. | ||
|
|
||
| In the :ref:`Stable ABI <stable-abi>` for free-threaded builds (``abi3t``), | ||
| this struct is opaque, and unusable in practice. |
There was a problem hiding this comment.
This is all covered above, but for people who land here with a direct link to this section, you could add a cross-reference suggesting the PyModExport API instead?
Doc/c-api/stable.rst
Outdated
| When using a build tool (for example, ``setuptools``), the tool is | ||
| generally responsible for setting macros and synchronizing them with | ||
| extension filenames and other metadata. | ||
| Prefer using the tool's options over defining the macros manually. |
There was a problem hiding this comment.
Maybe setuptools is a poor example to use above then? Because setuptools expects users to set the build flags manually...
You could delete the "(For example, SetupTools)" above, or maybe refer to meson-python or scikit-build-core instead? These days that's what I recommend to people depending on if they already use CMake or not.
There was a problem hiding this comment.
AFAIK Setuptools is the most widely known build tool; the example is there to clarify what kind of “build tool” I'm talking about.
Setuptools has a --py_limited_api argument. All tools will ideally need an update for abi3t.
Doc/c-api/stable.rst
Outdated
|
|
||
| The goal for the Limited API is to allow everything that is possible with the | ||
| - define both :c:macro:`!Py_LIMITED_API` and :c:macro:`!Py_TARGET_ABI3T`, or | ||
| - define only :c:macro:`!Py_LIMITED_API` and build for free-threaded Python. |
There was a problem hiding this comment.
| - define only :c:macro:`!Py_LIMITED_API` and build for free-threaded Python. | |
| - Define only :c:macro:`!Py_LIMITED_API` and define :c:macro:`!Py_GIL_DISABLED`. | |
| This happens automatically with a free-threaded interpreter, except on Windows. |
There was a problem hiding this comment.
I think defining Py_GIL_DISABLED "manually" is still only supported on Windows.
Doc/whatsnew/3.15.rst
Outdated
| free-threading (``cp315t``) separately. | ||
|
|
||
| Stable ABI for Free-Threaded Builds should typically | ||
| be selected in a build tool (such as Setuptools, meson-python, Cython, |
There was a problem hiding this comment.
Maybe split this between build backends and bindings generators? Both probably need configuration.
It's a little confusing to group Cython in with meson-python.
There was a problem hiding this comment.
Guess it's best to drop Cython from the examples.
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
📚 Documentation preview 📚: https://cpython-previews--148013.org.readthedocs.build/